using UnityEngine;
using UnityEngine.UI;
using TMPro;
//用于管理库存槽的 UI 元素
public class InventorySlot_UI : MonoBehaviour
{
    [SerializeField] private Image itemSprite; // 物品图像的引用
    [SerializeField] private TextMeshProUGUI itemCount; // 物品数量的引用
    [SerializeField] private InventorySlot assignedInventorySlot; // 分配的库存槽引用
    private Button button; // 按钮的引用

    public InventorySlot AssignedInventorySlot => assignedInventorySlot; // 分配的库存槽属性

    public InventoryDisplay ParentDisplay { get; private set; }  // 父级背包显示

    private Image image;
    public Color selectedColor, notSelectedColor;//选中和不选中颜色

    private void Awake()
    {
        ClearSlot(); // 清空库存槽

        itemSprite.preserveAspect = true;
        
        button = GetComponent<Button>(); // 获取按钮组件
        button?.onClick.AddListener(OnUISlotClick); // 为按钮点击事件添加监听器

        ParentDisplay = transform.parent.GetComponent<InventoryDisplay>();  // 获取父级背包显示组件

        image = GetComponent<Image>();
        Deselect();// 初始化时取消选中
    }

    //选择该槽位颜色修改
    public void Select()
    {
        image.color = selectedColor;
    }
    //取消选择该槽位颜色修改
    public void Deselect()
    {
        image.color = notSelectedColor;
    }

    // 当该 UI 槽位被点击时触发
    public void OnUISlotClick()
    {
        ParentDisplay?.SlotClicked(this);  // 调用父级背包显示组件的 Slotclicked 方法，并将自身作为参数传递
    }

    public void Init(InventorySlot slot)
    {
        assignedInventorySlot = slot; // 分配库存槽
        UpdateUISlot(slot); // 更新 UI 库存槽
    }
 
    public void UpdateUISlot(InventorySlot slot)
    {
        if (slot.ItemData != null) // 如果库存槽中有物品数据
        {
            itemSprite.sprite = slot.ItemData.Icon; // 更新物品图像
            itemSprite.color = Color.white; // 设置物品图像颜色为白色
            if (slot.StackSize > 1) 
            {
                itemCount.text = slot.StackSize.ToString(); // 显示物品数量
            }
            else
            {
                itemCount.text = ""; // 隐藏物品数量
            }
        }
        else // 如果库存槽中没有物品数据
        {
            ClearSlot(); // 清空库存槽
        }
    }

    public void UpdateUISlot()
    {
        if (assignedInventorySlot != null) // 如果分配了库存槽
        {
            UpdateUISlot(assignedInventorySlot); // 更新 UI 库存槽
        }
    }

    public void ClearSlot()
    {
        assignedInventorySlot?.ClearSlot(); // 清空库存槽引用
        itemSprite.sprite = null; // 设置物品图像为空
        itemSprite.color = Color.clear; // 设置物品图像颜色为透明
        itemCount.text = ""; // 设置物品数量为空
    }

    
}
